package com.spsoft.vatoutinv.service.matchflow;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.spsoft.core.model.Result;
import com.spsoft.system.entity.NvatOutInvoiceDetails;
import com.spsoft.system.entity.NvatOutInvoiceItems;
import com.spsoft.vatoutinv.entity.matchflow.VmsMatching;
import com.spsoft.vatoutinv.entity.matchflow.VmsMatchingDetail;
import com.spsoft.vatoutinv.model.dto.matchflow.VmsMatchFlowPageDto;
import com.spsoft.vatoutinv.model.vo.matchflow.VmsMatchFlowApplyVo;
import com.spsoft.vatoutinv.model.vo.matchflow.VmsMatchInvoiceDetailVo;
import com.spsoft.vatoutinv.model.vo.matchflow.VmsMatchRecordVo;

import java.util.List;

/**
 * <p>
 * 手工匹配流水表 服务类
 * </p>
 *
 * @author chenxudong
 * @since 2024-06-25
 */
public interface VmsMatchingService extends IService<VmsMatching> {

    /**
     * 获取手工匹配流水或手工匹配流水撤销记录
     * @param page 分页参数
     * @param pageDto 查询条件
     * @return 手工匹配流水/手工匹配流水撤销记录
     */
    IPage<VmsMatchFlowApplyVo> pageApply(Page<VmsMatchFlowApplyVo> page, VmsMatchFlowPageDto pageDto);

    /**
     * 获取手工匹配流水或手工匹配流水撤销记录-excel导出使用
     * @param pageDto 查询条件
     * @return 手工匹配流水/手工匹配流水撤销记录
     */
    List<VmsMatchFlowApplyVo> getApplyData(VmsMatchFlowPageDto pageDto);

    /**
     * 判断发票匹配流水/撤销是否存在未结束的流程
     * @param matchFlowType 0：发票匹配流水 1：发票匹配流水撤销
     * @param fpdm 发票代码
     * @param fphm 发票号码
     * @param deptCode 机构编码
     * @param applyId 当前审批流id
     * @param oidid 老系统发票id
     */
    Result<Object> judgeProcessIsFinish(String matchFlowType, String fpdm, String fphm, String deptCode, Long applyId, Long oidid);

    /**
     * 查询手工匹配流水记录主信息
     * @param matid 匹配流水记录id
     */
    VmsMatchRecordVo getMatchDetailById(Long matid);

    /**
     * 将老系统发票主信息转为发票匹配流水/撤销-发票主信息
     * @param nvatOutInvoiceDetail 老系统发票主信息
     * @param matid 匹配记录id
     * @return 发票匹配流水-发票主信息
     */
    VmsMatchInvoiceDetailVo convertToDetailVo(NvatOutInvoiceDetails nvatOutInvoiceDetail, Long matid);

    /**
     * 构造发票匹配/撤销流水-查看已匹配记录明细信息
     * @param nvatOutInvoiceItems 老系统发票明细信息
     * @param matchDetailList 明细匹配的流水记录
     */
    VmsMatchRecordVo.VmsMatchItemRecordVo buildMatchItemRecord(NvatOutInvoiceItems nvatOutInvoiceItems, List<VmsMatchingDetail> matchDetailList);
}
